前のページ   後のページ   目次へ

********************************

       ■■■■
     ■    ■       ■        ■
     ■           ■■■      ■■■
     ■    ■       ■        ■
       ■■■■
               〜基礎から ★ C++Programing〜
********************************

  【注意】 このマガジンは、最大化してお読みください。
       また、等角フォントでお読みください。
          (MS ゴシックなど)

********************************

 発行者      むーくん
 マガジンNO.  72(5−12)
 発行日      2001/2/21
 講読人数     2000名ぐらい
 マガジンID   0000050494
          このマガジンは、まぐまぐから配信されています。
********************************
★あいさつ★

自転車で駆けるのが気持ちよくなってきました。
そろそろ春ですね。まだ早い?
たっぷり食べて、今から元気をつけたいですね!!

********************************






********************************
★目次★

   ・ネスト
   ・サンプルプログラム
   ・処理に手間取る例
   ・用語解説
   ・予告

********************************
★ネスト★

if文などと同様に、ループ文もネスト(入れ子)が可能です。
ちょっとしたアルゴリズムを記述するときは、よく使用します。

カウンタを2重に張ることができますが、
処理の流れをよく考えて、混乱しないようにしましょう。

********************************
★サンプルプログラム★

・九九の表を作成します。

#include<iostream>
using namespace std;

int main(void){
    int i,j;

    for(i=1; i<=9; i++){
        for(j=1; j<=9; j++){
            cout.width(4);         /* 4桁に揃える */
            cout << i*j;
        }
        cout << endl;
    }
    return 0;
}

【解説】
  cout.width()は、表を見やすく揃えているだけです。
  「用語解説」を参照してください。


  処理を追ってみましょう。
  ループを内側から考えてみると分かりやすくなります。
  j が1から始まり、10まで来ると、内側のループが終了します。
  このとき、まだ i の値は、1です。

  次の行のcoutで改行されると、
  外側のforループに戻り、i がインクリメントされて、
  i の値は2になります。
  そして、また内側のforループが始まります。
  注意するのは、10まで進んだ j ももう一度初期化されて
  0になっているということです。

  また j が1〜10まで繰り返され、改行され、
  i を3にインクリメントし・・・・
  と続きます。

  こうして、内側のforを9回、
  それを外側のforが9回繰り返しているのです。


  ☆ 今まではforの初期化は、一回しか見られませんでしたが、
    ネストすると、内側のforの初期化は、
    複数回おきることに注意してください。


【変数の動き・図説】

i | 1 1 1 1 1 1 1 1 1 2 2 2 2 ……
j | 1 2 3 4 5 6 7 8 9 1 2 3 4 ……
−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
答え| 1 2 3 4 5 6 7 8 9 2 4 6 8 ……

********************************
★処理に手間取る例★

  これだけでもかなり複雑になることが分かったでしょう。
  繰り返し回数が外と中で同じなら、全体で回数はその2乗になります。
  3重ループなら、回数はなんと3乗です!

  場合によっては、深刻な速度低下につながることもあります。


・1000回ずつのループを3重にしています。
 繰り返し回数を表示するプログラムです。

#include<iostream>
using namespace std;

int main(void){
    int i,j,k
    long count;

    count=0;
    for(i=0; i<1000; i++){
        for(j=0; j<1000; j++){
            for(k=0; k<1000; k++){
                count++;
            }
        }
    }
    cout << "繰り返し回数は、" << count <<endl;
    return 0;
}


【解説】
  実行してみたら分かりますが、少し実行に時間がかかるようです。
  なんと繰り返し回数は、10億回!

  同じ要領でループは何重にもすることができますが、
  爆発的に実行回数が増えていることがあるので、
  よく注意してください。

  また、環境によっては、10億という数値は int型には
  入りきらないので long型を使っています。
  数字の桁あふれにも十分注意しましょう。

********************************
★用語説明★

cout.width(n)
  表示けた数の最小値を設定する関数です。
  n で指定した数値のけた数で表示されますが、
  オーバーしたときは無視されます。
  今回は、最大で2けたなので、4で十分でした。

cout.precision(n)
  以前学習したものの復習です。
  こちらは、小数点の最大表示けた数を設定します。

********************************
★予告★

   for while do-while の関係を学習します。

********************************






********************************


講読解除はこちら

http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html

バックナンバーはこちら
http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html

内容について質問やご意見など
smukun@hotmail.com

筆者のWebサイト(むーくんの理学的なんでも講座)
http://members.tripod.co.jp/mukun_mmg/

************************************

前のページ   後のページ   目次へ

[PR]女性が輝く公文の先生募集中!:全国で教室開設説明会開催